"""
此脚本用于遍历目录中的所有Excel，对于每个Excel单独建立文件夹并将该Excel中的每个sheet以sheet名单独保存到该文件夹中
"""
import os
from openpyxl import load_workbook

def save_each_sheet_to_folder(directory):
    """
    对指定目录下的每个 Excel 文件：
    1. 创建一个与文件同名的文件夹。
    2. 打开 Excel 文件，逐个保留其中的一个 sheet，删除其他 sheet。
    3. 将每个保留的 sheet 另存为新的 Excel 文件，保存到对应的文件夹中。
    4. 在终端打印保存的文件路径和 sheet 名称。
    """
    # 确保传入的路径是有效的目录
    if not os.path.isdir(directory):
        print(f"路径 '{directory}' 不是有效目录！")
        return

    # 遍历目录下的所有文件
    for filename in os.listdir(directory):
        # 检查是否为 Excel 文件（以 .xlsx 结尾）
        if filename.endswith(".xlsx"):
            # 获取文件的完整路径
            file_path = os.path.join(directory, filename)
            # 获取文件名（不含扩展名）作为文件夹名
            file_name_without_ext = os.path.splitext(filename)[0]
            folder_path = os.path.join(directory, file_name_without_ext)

            # 创建与文件名同名的文件夹（如果不存在）
            os.makedirs(folder_path, exist_ok=True)

            # 加载原始 Excel 文件
            workbook = load_workbook(file_path)

            # 遍历每个 sheet（逐个保留，删除其他 sheet）
            for sheet_name in workbook.sheetnames:
                # 重新加载原始 Excel 文件（确保每次都是从原始文件开始）
                temp_workbook = load_workbook(file_path)

                # 删除其他 sheet，仅保留当前 sheet
                for temp_sheet_name in temp_workbook.sheetnames:
                    if temp_sheet_name != sheet_name:
                        del temp_workbook[temp_sheet_name]

                # 构建新的文件路径（保存到同名文件夹中，以 sheet 名称命名）
                new_file_name = f"{sheet_name}.xlsx"
                new_file_path = os.path.join(folder_path, new_file_name)

                # 保存新的 Excel 文件
                temp_workbook.save(new_file_path)
                temp_workbook.close()

                # 在终端打印保存的文件路径和 sheet 名称
                print(f"已保存：'{new_file_path}'（来自 sheet: '{sheet_name}'）")

            print(f"文件 '{filename}' 的所有 sheets 已分别保存到文件夹 '{folder_path}' 中！\n")


if __name__ == "__main__":
    # 替换为包含 Excel 文件的目录路径
    directory = r'D:\PythonProjects\excel_proceed\test'
    save_each_sheet_to_folder(directory)

